package zp.weibo.util;

import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.httpclient.util.EncodingUtil;
import org.xmlpull.v1.XmlPullParser;

import weibo4andriod.Status;
import weibo4andriod.Weibo;
import android.util.Log;
import android.util.Xml;

/**
 * 
 * 微博工具类
 * 
 * @author zhouping
 * 
 */
public class WeiboUtil {

	private static String appkey = "3641955521";

	private static String sinaurl = "http://api.t.sina.com.cn/";

	private static final String user = "55342550@qq.com";

	private static final String pass = "999897";
	
	private static final String TAG="NET";

	public static void pubComment(String msgid, String comment)
			throws Exception {
		// 用于注册的用户名 密码 问题 答案临时变量
		// String temp="tester";
		String urlstr = "http://api.t.sina.com.cn/statuses/comment.xml?source="+appkey;
		URL url = new URL(urlstr);
		HttpURLConnection conn = (HttpURLConnection)url.openConnection();
		conn.setRequestProperty("Authorization", authenticate());
		// 这里是关键，表示我们要向链接里输出内容
		conn.setDoOutput(true);
		// 获得连接输出流
		OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
		// 这里是我定义了一组账号信息，字段+数据
		String str = String.format(Locale.CHINA, "id=%s&&comment=%s",msgid,comment);
		// 把数据写入
		out.write(str);
		out.flush();
		out.close();
		
		conn.getInputStream();
		// 到这里已经完成了，不过我们还是看看返回信息吧，他的注册返回信息也在此页面
//		BufferedReader reader = new BufferedReader(new InputStreamReader(conn
//				.getInputStream()));
		
//		String line = null;
//		int lineNum = 1;
//		StringBuffer sb = new StringBuffer();
//		while ((line = reader.readLine()) != null) {
//			++lineNum;
//			sb.append(line);
//		}
//		return sb.toString();
	}

	public static List<Comment> getComments(String msgid) throws Exception {
		String link = "http://api.t.sina.com.cn/statuses/comments.xml?source=3641955521&id="
				+ msgid + "&count=5";

		URL u = new URL(link);
		//		
		HttpURLConnection uc = (HttpURLConnection) u.openConnection();
		uc.setRequestProperty("Authorization", authenticate());

		InputStream is = uc.getInputStream();

		// 创建一个Pull解析器
		XmlPullParser parser = Xml.newPullParser();
		// 设置输入流以UTF-8编码进行解析
		parser.setInput(is, "UTF-8");

		// 得到当前解析的位置
		int type = parser.getEventType();

		Comment cm = null;
		List<Comment> cms = null;
		int uFlag = 0;
		int tFlag = 0;

		// 当没有解析到文档末尾时，一直执行
		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {

			case XmlPullParser.START_DOCUMENT:// 开始解析文档事件
				cms = new ArrayList<Comment>();
				break;

			case XmlPullParser.START_TAG:// 开始解析标签元素事件
				if ("comment".equals(parser.getName())) {
					cm = new Comment();
					uFlag = 0;
					tFlag = 0;
				}
				if (cm != null) {
					if ("text".equals(parser.getName())) {
						if (tFlag == 0) {
							String name = parser.nextText();
							cm.setContent(name);
							tFlag = 1;
						}

					}
					if ("screen_name".equals(parser.getName())) {
						if (uFlag == 0) {
							String name = parser.nextText();
							cm.setUser(name);
							uFlag = 1;
						}

					}
				}
				break;

			// 当解析到结束标签时
			case XmlPullParser.END_TAG:
				if ("comment".equals(parser.getName())) {
					if (cms != null && cm != null) {
						cms.add(cm);
						cm = null;
					}
				}
				break;
			}
			// 当前解析位置结束，指向下一个位置
			type = parser.next();
		}
		is.close();
		return cms;
	}

	/**
	 * 获取微博
	 * 
	 * @return
	 * @throws Exception
	 */
	public static List<Message> getContext() throws Exception {
//		try{
//			Log.e(TAG, "开始了");
//			Weibo weibo = new Weibo("55342550@qq.com","999897");
//			Log.e(TAG, "创建了");
//			List<Status> list = weibo.getPublicTimeline();
//			Log.e(TAG, "什么情况");
//			
//			for (Status s : list)
//				Log.e(TAG, s.toString());
//		}catch (Exception e) {
//			Log.e(TAG, e.toString());
//		}
		
		
		
		String url = "http://api.t.sina.com.cn/statuses/friends_timeline.xml?source=3641955521&count=5";
		InputStream is = NetUtil.Get(url, authenticate());
		
		if(null == is)
			throw new Exception("无数据");

		// 创建一个Pull解析器
		XmlPullParser parser = Xml.newPullParser();
		// 设置输入流以UTF-8编码进行解析
		parser.setInput(is, "UTF-8");

		// 得到当前解析的位置
		int type = parser.getEventType();

		Message message = null;
		List<Message> messages = null;
		int iFlag = 0;
		int tFlag = 0;
		int sFlag = 0;
		// 当没有解析到文档末尾时，一直执行
		while (type != XmlPullParser.END_DOCUMENT) {
			switch (type) {

			case XmlPullParser.START_DOCUMENT:// 开始解析文档事件
				messages = new ArrayList<Message>();
				break;

			case XmlPullParser.START_TAG:// 开始解析标签元素事件
				if ("status".equals(parser.getName())) {
					message = new Message();
					iFlag = 0;
					tFlag = 0;
					sFlag = 0;
				}
				if (message != null) {
					if ("id".equals(parser.getName())) {
						String id = parser.nextText();
						if (iFlag == 0) {
							iFlag++;
							message.setId(id);
						} else if(1 == iFlag){
							iFlag ++;
							message.setUser_id(id);
						}
					}
					if ("text".equals(parser.getName())) {
						if(tFlag == 0){
							tFlag++;
							String name = parser.nextText();
							message.setContent(name);
						}
						
					}
					if ("screen_name".equals(parser.getName())) {
						if(sFlag==0){
							sFlag++;
							String name = parser.nextText();
							message.setUser(name);
						}
						
					}
				}
				break;

			// 当解析到结束标签时
			case XmlPullParser.END_TAG:
				if ("status".equals(parser.getName())) {
					if (message != null && messages != null) {
						messages.add(message);
						message = null;
					}
				}
				break;
			}
			// 当前解析位置结束，指向下一个位置
			type = parser.next();
		}
		is.close();
		return messages;
	}

	// Copy from the httpclient source code
	public static String authenticate() {

		StringBuffer buffer = new StringBuffer();
		buffer.append(user);
		buffer.append(":");
		buffer.append(pass);

		return "Basic "
				+ EncodingUtil.getAsciiString(Base64.encodeBase64(EncodingUtil
						.getBytes(buffer.toString(), "uft-8")));
	}

}
